package service

import (
	"gin-vue-admin/global"
	"gin-vue-admin/model"
	"gin-vue-admin/model/request"
	"net/url"
	"os"
)

//@author: [piexlmax](https://github.com/piexlmax)
//@function: CreateFileManager
//@description: 创建FileManager记录
//@param: fileManager model.FileManager
//@return: err error

func CreateFileManager(fileManager model.FileManager) (err error) {
	err = global.GVA_DB.Create(&fileManager).Error
	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: DeleteFileManager
//@description: 删除FileManager记录
//@param: fileManager model.FileManager
//@return: err error

func DeleteFileManager(fileManager model.FileManager) (err error) {
	// 查询文件信息
	err = global.GVA_DB.Where("id=?", fileManager.ID).First(&fileManager).Error
	if err != nil {
		global.GVA_LOG.Error(err.Error())
	}
	// 查询md5 文件信息
	extFile := model.ExaSimpleUploader{}
	err = global.GVA_DB.Where("filename = ?", fileManager.FileName).First(&extFile).Error
	if err != nil {
		global.GVA_LOG.Error(err.Error())
	}
	// 删除本地文件
	os.Remove(extFile.FilePath)
	err = global.GVA_DB.Delete(&model.ExaSimpleUploader{}, "identifier = ?", extFile.Identifier).Error
	if err != nil {
		global.GVA_LOG.Error(err.Error())
	}
	// 删除fastdfs 文件
	url, err := url.Parse(fileManager.FileUri)
	if err != nil {
		global.GVA_LOG.Error(err.Error())
	}
	global.GVA_FASTDFS.DeleteFile(url.Path)

	// 删除文件管理文件
	err = global.GVA_DB.Delete(&fileManager).Error

	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: DeleteFileManagerByIds
//@description: 批量删除FileManager记录
//@param: ids request.IdsReq
//@return: err error

func DeleteFileManagerByIds(ids request.IdsReq) (err error) {
	err = global.GVA_DB.Delete(&[]model.FileManager{}, "id in ?", ids.Ids).Error
	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: UpdateFileManager
//@description: 更新FileManager记录
//@param: fileManager *model.FileManager
//@return: err error

func UpdateFileManager(fileManager model.FileManager) (err error) {
	err = global.GVA_DB.Save(&fileManager).Error
	return err
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: GetFileManager
//@description: 根据id获取FileManager记录
//@param: id uint
//@return: err error, fileManager model.FileManager

func GetFileManager(id uint) (err error, fileManager model.FileManager) {
	err = global.GVA_DB.Where("id = ?", id).First(&fileManager).Error
	return
}

//@author: [piexlmax](https://github.com/piexlmax)
//@function: GetFileManagerInfoList
//@description: 分页获取FileManager记录
//@param: info request.FileManagerSearch
//@return: err error, list interface{}, total int64

func GetFileManagerInfoList(info request.FileManagerSearch) (err error, list interface{}, total int64) {
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)
	// 创建db
	db := global.GVA_DB.Model(&model.FileManager{})
	var fileManagers []model.FileManager
	// 如果有条件搜索 下方会自动创建搜索语句
	if info.FileName != "" {
		db = db.Where("`file_name` LIKE ?", "%"+info.FileName+"%")
	}
	if info.FileType != "" {
		db = db.Where("`file_type` = ?", info.FileType)
	}
	if info.FileMd5 != "" {
		db = db.Where("`file_md5` = ?", info.FileMd5)
	}
	if info.FileAuthor != "" {
		db = db.Where("`file_author` LIKE ?", "%"+info.FileAuthor+"%")
	}
	if info.FileMemo != "" {
		db = db.Where("`file_memo` LIKE ?", "%"+info.FileMemo+"%")
	}
	err = db.Count(&total).Error
	err = db.Order("created_at DESC").Limit(limit).Offset(offset).Find(&fileManagers).Error
	return err, fileManagers, total
}
